package IO;

import java.io.*;

public class KaoBeiTest {
    public static void main(String[] args) {
        //拷贝源
        File srcFile =new File("D:\\BanGong\\TestFile");
        //拷贝目标
        File destFile =new File("F:\\");
        //调用方法拷贝
        copyDir(srcFile,destFile);
    }
    //拷贝方法
    public static void copyDir(File srcFile,File destFile){
        //读内容
        if (srcFile.isFile()) {
            //如果源目标一个文件，需要拷贝递归结束
            FileInputStream in =null;
            FileOutputStream out =null;
            try {
                in =new FileInputStream(srcFile);
                //写入的路径是存储路径加上原有的路径（截取磁盘根之后的路径）
                out =new FileOutputStream((destFile.getAbsolutePath().endsWith("\\")? destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")
                        +srcFile.getAbsolutePath().substring(3));
                //边读边写
                byte[] bytes =new byte[1024*1024];//缓存数组
                int readCount =0;
                while((readCount = in.read(bytes))!=-1){ out.write(bytes,0,readCount); }
                //写完要刷新
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(in != null){
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(out != null){
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return;
        }
        File[] files =srcFile.listFiles();
        for (File s:files) {
            //获取所有的目录和文件的绝对路径
            if (s.isDirectory()) {
                //如果目标是一个目录则新建对应的目录
                String srcDir =s.getAbsolutePath();//源目录
                String destDir =(destFile.getAbsolutePath().endsWith("\\")? destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")+srcDir.substring(3);//目标目录
                File newFile =new File(destDir);
                if (!newFile.exists()) {//如果没有该目录
                    newFile.mkdirs();//新建目录
                }
            }
            copyDir(s,destFile);//如果源目标内有文件夹，则继续递归，取出文件
        }
        //写内容
    }
}